package com.adingxiong.quickstart.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.net.*;

/**
 * @ClassName Ge
 * @Description 获取当前访问用户的真是ip地址
 * @Author xiongchao
 * @Date 2020/5/29 9:13
 **/
public class GetRealIp
{

    private static final String ACK_KEY = "WFOHxxeHmZEoXSujMXq9Eeq6GIP1dv8D";

    /**
     * 获取当前用户的ip
     * @param request
     * @return
     */
    public static String getIpaddr(HttpServletRequest request){
        String ipAddress = request.getHeader("x-forwarded-for");
        if(ipAddress == null || ipAddress.length() ==0 || "unknown".equals(ipAddress)){
            ipAddress = request.getHeader("Proxy-Client-IP");
        }
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("WL-Proxy-Client-IP");
        }
        if (StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("HTTP_CLIENT_IP");
        }
        if (StringUtils.isEmpty(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getRemoteAddr();
            if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
                //根据网卡取本机配置的IP
                InetAddress inet=null;
                try {
                    inet = InetAddress.getLocalHost();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }
                ipAddress= inet.getHostAddress();
            }
        }
        //对于通过多个代理的情况，第一个IP为客户端真实IP,多个IP按照','分割
        if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
            if(ipAddress.indexOf(",")>0){
                ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
            }
        }
        return ipAddress;
    }


    /**
     * 通过ip  获取地址
     * @param ip
     * @return
     */
    public static String  getAddress(String ip){

        String info = "";
        String path = String.format("http://api.map.baidu.com/location/ip?ak=%s&ip=%s&coor=bd09ll", ACK_KEY,ip);
        String temp = HttpUtil.doGet(path);
        JSONObject obj = (JSONObject) JSON.parse(temp);
        int code = (int) obj.get("status");
        if(code == 0) {
            JSONObject content = obj.getJSONObject("content");
            info = (String) content.get("address");
        } else {
            info = "本地局域网";
        }
        return info;
    }


}
